package com.itcam.maker.generator;

import cn.hutool.core.io.FileUtil;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;

/**
 * @author : Cammy.Wu
 * Description : 脚本文件生成逻辑
 */

/**
 * 脚本生成器类，用于生成可执行的脚本文件
 */
public class ScriptGenerator {

    /**
     * 生成可执行的脚本文件
     *
     * @param outputPath 生成的脚本文件的输出路径
     * @param jarPath    要执行的JAR文件的路径
     * @throws IOException 如果在文件写入过程中发生I/O错误
     */
    public static void doGenerate(String outputPath, String jarPath) throws IOException {
        // 直接写入脚本文件
        // linux
        StringBuilder sb = new StringBuilder();
        sb.append("#!/bin/bash").append("\n");
        sb.append(String.format("java -jar %s \"$@\"", jarPath)).append("\n");
        FileUtil.writeBytes(sb.toString().getBytes(StandardCharsets.UTF_8), outputPath);
        // 添加可执行权限
        try {
            Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rwxrwxrwx");
            Files.setPosixFilePermissions(Paths.get(outputPath), permissions);
        } catch (Exception e) {
            // 处理权限设置失败的情况
        }

        // windows
        sb = new StringBuilder();
        sb.append("@echo off").append("\n");
        sb.append(String.format("java -jar %s %%*", jarPath)).append("\n");
        FileUtil.writeBytes(sb.toString().getBytes(StandardCharsets.UTF_8), outputPath + ".bat");
    }

    /**
     * 主方法，程序入口点
     *
     * @param args 命令行参数
     * @throws IOException 如果在文件写入过程中发生I/O错误
     */
    public static void main(String[] args) throws IOException {
        // 获取当前工作目录并拼接生成器目录
        String outputPath = System.getProperty("user.dir") + File.separator + "generator";
        // 调用doGenerate方法生成脚本文件，JAR路径为空字符串
        doGenerate(outputPath, "");
    }
}


